{"componentChunkName":"component---src-templates-blog-post-js","path":"/Today I Learned/Parent_element에_click이_발생할_때_Child_element의_클릭이벤트를_제어하기/","result":{"data":{"site":{"siteMetadata":{"title":"JULog","author":"[Ju Chan Hwang]","siteUrl":"https://julog.netlify.app","comment":{"disqusShortName":"","utterances":"JuChanHwang/gatsby-starter-bee"},"sponsor":{"buyMeACoffeeId":"jbee"}}},"markdownRemark":{"id":"f0996981-15bf-5e72-835f-108261e81892","excerpt":"ISSUE  버튼을 클릭했을 때 모달이 열리는 이슈 아이템 전체 요소에  event를 걸어서 자식 요소를 클릭했을 때도 event가 발생하는 원인 해결 방안 click event를 인자로 넘겨준다. 문의 버튼 element를 ViewChild로 받아서 ts에서 제어한다. element에 event.target이 포함(contains()) 되어있지 않으면 모달을 열어준다. HTML TS","html":"<h2 id=\"issue\" style=\"position:relative;\"><a href=\"#issue\" aria-label=\"issue permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ISSUE</h2>\n<ul>\n<li><code class=\"language-text\">문의</code> 버튼을 클릭했을 때 모달이 열리는 이슈</li>\n<li>아이템 전체 요소에 <code class=\"language-text\">click</code> event를 걸어서 자식 요소를 클릭했을 때도 event가 발생하는 원인</li>\n</ul>\n<video width=\"100%\" height=\"300\" controls>\n  <source src=\"/d8384953120e09d3ba6a69ad68954848/preventOpenModal.mov\" type=\"video/mp4\">\n</video>\n<h2 id=\"해결-방안\" style=\"position:relative;\"><a href=\"#%ED%95%B4%EA%B2%B0-%EB%B0%A9%EC%95%88\" aria-label=\"해결 방안 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>해결 방안</h2>\n<ul>\n<li>click event를 인자로 넘겨준다.</li>\n<li>문의 버튼 element를 ViewChild로 받아서 ts에서 제어한다.</li>\n<li><code class=\"language-text\">telEl</code>element에 event.target이 포함(contains()) 되어있지 않으면 모달을 열어준다.</li>\n</ul>\n<blockquote>\n<p>HTML</p>\n</blockquote>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>item-container<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">(click)</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>openModal($event)<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n  ......\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">#telEl</span> <span class=\"token attr-name\">[href]</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token punctuation\">'</span>tel:'+lesson.phoneNumber[0]<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>si</span> <span class=\"token attr-name\">icon</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>phone-alt-solid<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>si</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>span</span><span class=\"token punctuation\">></span></span>문의<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>span</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span>\n  ......\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<blockquote>\n<p>TS</p>\n</blockquote>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token decorator\"><span class=\"token at operator\">@</span><span class=\"token function\">ViewChild</span></span><span class=\"token punctuation\">(</span><span class=\"token string\">'telEl'</span><span class=\"token punctuation\">)</span> telEl<span class=\"token operator\">:</span> ElementRef<span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">openModal</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>telEl<span class=\"token punctuation\">.</span>nativeElement<span class=\"token punctuation\">.</span><span class=\"token function\">contains</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">.</span>target<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>bsModalService<span class=\"token punctuation\">.</span><span class=\"token function\">show</span><span class=\"token punctuation\">(</span>MobileAcademyItemModalComponent<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>\n      initialState<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span> lesson<span class=\"token operator\">:</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>lesson <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>","frontmatter":{"title":"Parent element에 click이 발생할 때 child element의 클릭이벤트를 제어하기","date":"July 03, 2020"}}},"pageContext":{"slug":"/Today I Learned/Parent_element에_click이_발생할_때_Child_element의_클릭이벤트를_제어하기/","previous":{"fields":{"slug":"/Today I Learned/mobile_touch_swipe_indicator/"},"frontmatter":{"title":"Mobile Touch Swipe Indicator","category":"Today I Learned","draft":false}},"next":{"fields":{"slug":"/development/quick_start/"},"frontmatter":{"title":"Quick Start","category":"development","draft":false}}}},"staticQueryHashes":["3128451518","96099027"]}